import java.awt.Graphics;
import java.io.Serializable;
import java.util.LinkedList;

public abstract class Identificador extends Desenhavel implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2070550516931065528L;


	/**
	 * @uml.property name="identificacao"
	 */
	protected String identificacao;

	/**
	 * @uml.property name="retanguloEnvolvente"
	 * @uml.associationEnd inverse="identificador:Retangulo"
	 */
	protected Retangulo retanguloEnvolvente;

	/**
	 * @uml.property name="id"
	 */
	private static int id = 1;
	
	private Selecao selecao;
	
	private Boolean Selecionado;
	
	private LinkedList<LigacaoIdentificadorDestino> ligacoes ;
	
	private Conetor conetor;
	
	protected LigacaoIdentificadorDestino ligacao;
	
	protected LigacaoIdentificadorDestinoTexto ligacaoTexto;
	

	/**
	 */
	public Identificador(String identificacao, Retangulo retanguloEnvolvente) {
		super();
		this.identificacao = identificacao;
		this.retanguloEnvolvente = retanguloEnvolvente;
		this.setLigacoes(new LinkedList<LigacaoIdentificadorDestino>());
	}

	/**
	 */
	public Identificador(Retangulo retanguloEnvolvente) {
		super();
		this.identificacao = "Objeto" + id++;
		this.retanguloEnvolvente = retanguloEnvolvente;
	
	}

	public String getIdentificacao() {
		return identificacao;
	}

	public void setIdentificacao(String identificacao) {
		this.identificacao = identificacao;
	}


	public Retangulo getRetanguloEnvolvente() {
		return retanguloEnvolvente;
	}

	public void setRetanguloEnvolvente(Retangulo retanguloEnvolvente) {
		this.retanguloEnvolvente = retanguloEnvolvente;
	}

	/**
		 */
	public abstract void desenhar(Graphics graphics);

	/**
		 */
	public abstract boolean isSob(Coordenada coordenada);

	
	
	public void setSelecao(Selecao selecao) {
		this.selecao = selecao;
	}

	public void setSelecionado(Boolean selecionado) {
		Selecionado = selecionado;
	}

	public Boolean getSelecionado() {
		return Selecionado;
	}

	public Selecao getSelecao() {
		return selecao;
	}

	public boolean podeAssociar(Identificador identificadorDestino) {
		
			if(identificadorDestino == null)
				return false;
		return true;
	}

	public LigacaoIdentificadorDestino associar(Identificador identificador) {
		// TODO Auto-generated method stub
		this.ligacao = new LigacaoIdentificadorDestino(this,identificador);
		//ligacoes.add(ligacao);
		return ligacao;
	}
	
	public LigacaoIdentificadorDestinoTexto associarCTexto(Identificador identificador) {
		// TODO Auto-generated method stub
		this.ligacaoTexto = new LigacaoIdentificadorDestinoTexto(this,identificador);
		//ligacoes.add(ligacao);
		return ligacaoTexto;
	}

	public void reset(){
		this.ligacao = null;
	}

	public LinkedList<LigacaoIdentificadorDestino> getLigacoes() {
		return ligacoes;
	}

	public void setLigacoes(LinkedList<LigacaoIdentificadorDestino> ligacoes) {
		this.ligacoes = ligacoes;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		
		sb.append("Identificao").append(identificacao).append("\n");
		sb.append(retanguloEnvolvente);
		return sb.toString();
	}

	public Conetor getConetor() {
		return conetor;
	}

	public void setPontosConetores(Conetor conetor) {
		this.conetor = conetor;
	}
 
}
